package com.itheima.web;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.bean.Setmeal;
import com.itheima.common.PageParam;
import com.itheima.common.R;
import com.itheima.dto.SetmealDto;
import com.itheima.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequestMapping("/setmeal")
@RestController
public class SetmealController {

    @Autowired
    private SetmealService setmealService;

    /**
     * 新增套餐
     *      1. 套餐的数据包含两部分： 套餐本身的数据， 套餐包含的菜品数据
     *      2. 需要往两张表里面存储： 套餐表（steaml）, 套餐菜品表（setmeal_dish）
     *      3. 先往套餐表存数据，这样就能产生套餐的id值。
     *      4. 接着再包套餐包含的菜品数据，挨个保存到套餐菜品表里面去。同时
     *          保存之前，要设置菜品数据属于哪个套餐！设置套餐的id。
     *      5. 这个操作和前面的新增菜品是一样的道理！
     * @param setmealDto
     * @return
     */
    @CacheEvict(cacheNames = "setmeal", allEntries = true)
    @PostMapping
    public R add(@RequestBody SetmealDto setmealDto){

        //1. 添加数据
        int row = setmealService.add(setmealDto);

        //2. 判断返回结果
        if(row > 0){
            return R.success("添加套餐成功！");
        }

        return R.error("添加套餐失败！");
    }


    /**
     * 套餐分页
     * @param pageParam
     * @return
     */
    @GetMapping("/page")
    public R page(PageParam pageParam){

        //1. 调用service
        IPage<SetmealDto> dtoIPage = setmealService.page(pageParam);

        //2. 返回结果
        return R.success(dtoIPage);

    }

    /**
     * 删除套餐
     * @param ids
     * @return
     */
    @DeleteMapping
    @CacheEvict(cacheNames = "setmeal", allEntries = true)
    public R delete(@RequestParam List <Long> ids){
        int row = setmealService.delete(ids);
        if(row > 0){
            return R.success("删除套餐成功！");
        }
        return R.error("删除套餐失败！");
    }


    /**
     * 根据分类id查询套餐数据
     * @param categoryId
     * @param status
     * @return
     */
    @Cacheable(cacheNames = "setmeal" , key = "#a0")
    @GetMapping("/list")
    public R list(Long categoryId, Integer status){
        System.out.println("执行了list...........................");

        //1. 构建条件对象
        LambdaQueryWrapper<Setmeal> lqw = new LambdaQueryWrapper<>();
        lqw.eq(Setmeal::getCategoryId , categoryId);
        lqw.eq(Setmeal::getStatus , status);

        //2. 查询套餐
        List<Setmeal> setmealList = setmealService.list(lqw);

        return R.success(setmealList);

    }
}
